package com.huazai.juc.bedroom.thread.past;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class DeadLock {
    public static Object resource1 = new Object();
    public static Object resource2 = new Object();


    public static void main(String[] args) {
        new Thread(() -> {
            // 线程一：占用资源一，请求资源二
            synchronized (resource1) {
                System.out.println("线程一已经占用了资源一，开始请求资源二");
                try {
                    // 休息两秒，防止线程一直接运行完成
                    //  在这两秒内一定可以让线程二占用到资源二，从而使得线程死锁
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (resource2) {
                    System.out.println("线程一已经占用了资源二");
                }
            }
        }, "死锁一").start();

        new Thread(() -> {
            synchronized (resource2) {
                System.out.println("线程二已经占用了资源二，开始请求资源一");
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                synchronized (resource1) {
                    System.out.println("资源二已经占用了资源一");
                }
            }
        }, "死锁二").start();
    }
}
